package com.tjetc._2string;

public class _2StringExercise {
    public static void main2(String[] args) {
        String a = "abc";
        String b = "abc";
        System.out.println(a.equals(b)); // true
        System.out.println(a == b); // true
    }

    public static void main3(String[] args) {
        String a = new String("abc");
        String b = new String("abc");
        System.out.println(a.equals(b)); // true
        System.out.println(a == b); // false
    }

    public static void main4(String[] args) {
        String a = "zhangsan";
        String b = new String("zhangsan");
        System.out.println(a.equals(b)); // true
        System.out.println(a == b); // false

        // 如果方法是native方法 那么指的就是本地方法 调用了C或C++实现的
        /*
            检查当前的字符串在常量池中是否存在一个等于此对象的字符串。
            如果存在，则返回常量池中的字符串的引用
            如果不存在，则将此字符串添加到常量池中返回此对象的引用
            b.intern() 返回zhangsan这个字符串在常量池中的地址

         */
        System.out.println(a == b.intern()); // true
        System.out.println(b == b.intern()); // false
    }

    public static void main5(String[] args) {
        String s1 = "zhangsan";
        String s2 = "java";
        String s4 = "java";
        String s3 = new String("java");
        System.out.println(s2 == s3); // false
        System.out.println(s2 == s4); // true
        System.out.println(s2.equals(s3)); //true
        System.out.println(s1 == s2); // false
    }

    public static void main6(String[] args) {
        Person p1 = new Person();
        p1.name = "zhangsan";
        Person p2 = new Person();
        p2.name = "zhangsan";

        System.out.println(p1.name.equals(p2.name)); // true
        System.out.println(p1.name == p2.name); // true
        System.out.println(p1.name == "zhangsan"); // true

    }

    public static void main7(String[] args) {
        // 创建了几个对象？ 1个对象 helloabc String底层了优化
        String a = "hello" + "abc";
        String b = "helloabc";
        System.out.println(a == b); // true

        String c = "hello";
        String d = "abc";
        String e = "helloabc";

        // 1.String使用+时 其实底层创建了一个StringBuilder对象来进行拼接 然后在通过new String()来返回一个新对象
        System.out.println((c + d) == e); // false
        System.out.println((c + d).equals(e)); // true

    }

    public static void main(String[] args) {
        String a = "zhangsan";
        String b = "zhangsan1";
        System.out.println(a.compareTo(b));
    }
}

class Person {
    public String name;
}
